home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / pfs.h < prev    next >
C/C++ Source or Header  |  1995-06-18  |  14KB  |  391 lines

  1. /*
  2.  * Copyright (c) 1989, 1990, 1991 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <copyright.h>.
  6.  *
  7.  * xarchie v2.0 - gf - Sync with archie v1.4.1.
  8.  * v1.3.2 - bpk - for Archie client 1.3.2, except gf ZERO->BZERO
  9.  * v1.1.3 - gf  11/02/91 - renamed ZERO() to BZERO() for X
  10.  * v1.1.2 - bpk 08/30/91 - added VMS support
  11.  * v1.1.1 - bpk 08/20/91 - 4.2 -> 4.2B
  12.  */
  13. #ifndef PFS_H
  14. #define PFS_H
  15. #include <copyright.h>
  16.  
  17. #ifdef PCNFS
  18. #include <tklib.h>
  19. #include <tk_errno.h>
  20. #include <sys/nfs_time.h>
  21. #endif
  22. #ifdef VMS
  23. # include <vms.h>
  24. #else /* not VMS */
  25. # ifndef _TYPES_
  26. #  include <sys/types.h>
  27. # endif /* _TYPES_ */
  28. # ifndef IN_H
  29. #  include <netinet/in.h> 
  30. #  define IN_H
  31. # endif
  32. #endif /* VMS */
  33.  
  34. #ifndef NULL
  35. # ifdef MSDOS
  36. #  include <stdio.h>
  37. # else
  38. #  define NULL 0
  39. # endif /* MSDOS */
  40. #endif /* NULL */
  41.  
  42. #define        PFS_RELEASE    "Beta.4.2E"
  43. #define        PFS_SW_ID    "B42E"
  44.  
  45. /* moved up for vdir_init */
  46. #define BZERO(p)        bzero((char *)(p), sizeof(*(p)))
  47.  
  48. /* General Definitions */
  49.  
  50. #define        MAX_PTXT_LEN    1250     /* Max length of PTEXT structure   */
  51. #define        MAX_PTXT_HDR    32       /* Max offset for start            */
  52. #define        P_ERR_STRING_SZ 100     /* Size of error string        */
  53. #define        MAX_VPATH    1024     /* Max length of virtual pathname  */
  54.  
  55. /* Definition of text structure used to pass text around */
  56.  
  57. struct ptext {
  58.     int            length;          /* Length of text (from start)    */
  59.     char        *start;          /* Start of text            */
  60.     char        dat[MAX_PTXT_LEN+2*MAX_PTXT_HDR];/* The data itself */
  61.     unsigned long     mbz;          /* ZERO to catch runaway strings  */
  62.     struct ptext    *previous;        /* Previous element in list       */
  63.     struct ptext    *next;          /* Next element in linked list    */
  64.     int            seq;          /* Sequence Number            */
  65. };
  66.  
  67. typedef struct ptext *PTEXT;
  68. typedef struct ptext PTEXT_ST;
  69.  
  70. /* Request structure: maintains information about server requests */
  71. struct preq {
  72.     int            cid;          /* Connection ID                  */
  73.     short        priority;      /* Connection priority            */
  74.     int            pf_priority;      /* Priority assigned by pri_func  */
  75.     int            recv_tot;      /* Total # of packets received    */
  76.     int            trns_tot;      /* Total # of packets to transmit */
  77.     struct ptext    *cpkt;          /* Current packet being filled in */
  78.     struct ptext    *recv;          /* Received packets               */
  79.     struct ptext    *trns;          /* Transmitted packets            */
  80.     int            rcvd_thru;      /* Received all packets through # */
  81.     struct preq        *previous;        /* Previous element in list       */
  82.     struct preq        *next;          /* Next element in linked list    */
  83.     struct sockaddr_in    fromto;       /* Sender/Destination            */
  84. };
  85.  
  86. typedef struct preq *PREQ;
  87. typedef struct preq PREQ_ST;
  88.  
  89.  
  90. /* Definition of structure containing information on virtual link */
  91.  
  92. struct vlink {
  93.     int            dontfree;      /* Flag: don't free this link     */
  94.     char        *name;          /* Component of path name        */
  95.     char        linktype;      /* L = Link, U = Union, N= Native */
  96.     int            expanded;      /* Has a union link been expanded */
  97.     char        *type;            /* Type of object pointed to      */
  98.     struct vlink    *filters;      /* Filters associated with link   */
  99.     struct vlink    *replicas;      /* Replicas (* see comment below) */
  100.     char        *hosttype;      /* Type of hostname            */
  101.     char        *host;          /* Files physical location        */
  102.     char        *nametype;      /* Type of filename            */
  103.     char        *filename;      /* System level filename        */
  104.     long        version;      /* Version number of destination  */
  105.     long        f_magic_no;      /* File's magic number        */
  106.     struct acl        *acl;          /* ACL for link            */
  107.     long        dest_exp;      /* Expiration for dest of link    */
  108.     long        link_exp;      /* Expiration of link itself      */
  109.     char        *args;          /* Arguments if this is a filter  */
  110.     struct pattrib    *lattrib;      /* Attributes associated w/ link  */
  111.     struct pfile    *f_info;      /* Info to be assoicated w/ file  */
  112.     struct vlink    *previous;        /* Previous elt in linked list    */
  113.     struct vlink    *next;          /* Next element in linked list    */
  114. };
  115.  
  116. typedef struct vlink *VLINK;
  117. typedef struct vlink VLINK_ST;
  118.  
  119. /* * Note that vlink->replicas is not really a list of replicas of the  */
  120. /*   object.  Instead, it is a list of the objects returned during name */
  121. /*   resolution that share the same name as the current object.  Such   */
  122. /*   an object should only be considered a replica if it also shares    */
  123. /*   the same non-zero magic number.                                    */
  124.  
  125. /* Definition of structure continiaing virtual directory information    */
  126.  
  127. struct vdir {
  128.     int            version;      /* Version of local directory fmt  */
  129.     int            inc_native;      /* Include the native directory    */
  130.     long        magic_no;      /* Magic number of current file    */
  131.     struct acl        *dacl;            /* Default acl for links in dir    */
  132.     struct pfile    *f_info;      /* Directory file info             */
  133.     struct vlink    *links;          /* The directory entries         */
  134.     struct vlink    *lastlink;      /* Last directory entry            */
  135.     struct vlink    *ulinks;      /* The entries for union links     */
  136.     struct vdir        *previous;        /* Previous element in linked list */
  137.     struct vdir        *next;          /* Next element in linked list     */
  138. };
  139.  
  140. typedef struct vdir *PVDIR;
  141. typedef struct vdir VDIR_ST;
  142.  
  143. /* Initialize directory */
  144. #define vdir_init(dir)  BZERO(dir)
  145. /* XXX: was
  146.  
  147.   dir->version = 0;     dir->inc_native = 0; \
  148.   dir->magic_no = 0;    dir->f_info = NULL; \
  149.   dir->links = NULL;    dir->lastlink = NULL; \
  150.   dir->ulinks = NULL;   dir->dacl = NULL; \
  151.   dir->previous = NULL; dir->next = NULL;
  152. */
  153.  
  154. #define vdir_copy(d1,d2) d2->version = d1->version; \
  155.                          d2->inc_native = d1->inc_native; \
  156.                          d2->magic_no = d1->magic_no; \
  157.                  d2->f_info = d1->f_info; \
  158.                          d2->links = d1->links; \
  159.                          d2->lastlink = d1->lastlink; \
  160.                          d2->ulinks = d1->ulinks; \
  161.                          d2->dacl = d1->dacl; \
  162.                          d2->previous = d1->previous; \
  163.                          d2->next = d1->next; 
  164.                          
  165. /* Values of ->inc_native in vdir structure */
  166. #define VDIN_REALONLY    -1   /* Include native files, but not . and ..       */
  167. #define VDIN_NONATIVE     0   /* Do not include files from native directory   */
  168. #define VDIN_INCLNATIVE     1   /* Include files from native directory          */
  169. #define VDIN_NATIVEONLY  2   /* All entries in directory are from native dir */
  170. #define VDIN_PSEUDO      3   /* Directory is not real                        */
  171.  
  172.  
  173. /* Definition of structure containing information on a specific file */
  174.  
  175. union avalue {
  176.     char        *ascii;        /* Character string                */
  177.     struct vlink    *link;        /* A link               */
  178. };
  179.  
  180.  
  181. struct pattrib {
  182.     char        precedence;    /* Precedence for link attribute   */
  183.     char        *aname;        /* Name of the attribute           */
  184.     char        *avtype;    /* Type of the attribute value     */
  185.     union avalue    value;        /* Attribute Value                 */
  186.     struct pattrib    *previous;      /* Previous element in linked list */
  187.     struct pattrib    *next;        /* Next element in linked list     */
  188. };
  189.  
  190. typedef struct pattrib *PATTRIB;
  191. typedef struct pattrib PATTRIB_ST;
  192.  
  193. #define     ATR_PREC_OBJECT  'O'   /* Authoritative answer for object */
  194. #define     ATR_PREC_LINK    'L'   /* Authoritative answer for link   */
  195. #define     ATR_PREC_CACHED  'C'   /* Object info cached w/ link      */
  196. #define     ATR_PREC_REPLACE 'R'   /* From link (replaces O)          */
  197. #define     ATR_PREC_ADD     'A'   /* From link (additional value)    */
  198.  
  199. /* **** Incomplete **** */
  200. struct pfile {
  201.     int            version;      /* Version of local finfo format   */
  202.     long        f_magic_no;      /* Magic number of current file    */
  203.     long        exp;          /* Expiration date of timeout      */
  204.     long        ttl;          /* Time to live after reference    */
  205.     long        last_ref;      /* Time of last reference          */
  206.     struct vlink    *forward;      /* List of forwarding pointers     */
  207.     struct vlink    *backlinks;      /* Partial list of back links      */
  208.     struct pattrib    *attributes;      /* List of file attributes         */
  209.     struct pfile    *previous;        /* Previous element in linked list */
  210.     struct pfile    *next;          /* Next element in linked list     */
  211. };
  212.  
  213. typedef struct pfile *PFILE;
  214. typedef struct pfile PFILE_ST;
  215.  
  216. /* Definition of structure contining an access control list entry */
  217.  
  218. struct acl {
  219.     int            acetype;      /* Access Contol Entry type       */
  220.     char        *atype;           /* Authentication type            */
  221.     char        *rights;          /* Rights                         */
  222.     char        *principals;      /* Authorized principals          */
  223.     struct restrict     *restrictions;    /* Restrictions on use            */
  224.     struct acl        *previous;        /* Previous elt in linked list    */
  225.     struct acl        *next;          /* Next element in linked list    */
  226. };
  227. typedef struct acl *ACL;
  228. typedef struct acl ACL_ST;
  229.  
  230. #define ACL_NONE        0         /* Nobody authorized by ths entry */
  231. #define ACL_DEFAULT        1         /* System default                 */
  232. #define ACL_SYSTEM        2         /* System administrator           */
  233. #define ACL_OWNER               3         /* Directory owner                */
  234. #define ACL_DIRECTORY           4         /* Same as directory              */
  235. #define ACL_ANY                 5         /* Any user                       */
  236. #define ACL_AUTHENT             6         /* Authenticated principal        */
  237. #define ACL_LGROUP              7         /* Local group                    */
  238. #define ACL_GROUP               8         /* External group                 */
  239. #define ACL_ASRTHOST            10        /* Check host and asserted userid */
  240. #define ACL_TRSTHOST            11        /* ASRTHOST from privileged port  */
  241.  
  242.  
  243. /* Definition of structure contining access restrictions */
  244. /* for future extensions                                 */
  245. struct restrict {
  246.     struct acl        *previous;        /* Previous elt in linked list    */
  247.     struct acl        *next;          /* Next element in linked list    */
  248. };
  249.  
  250. /* Definitions for send_to_dirsrv */
  251. #define    CLIENT_DIRSRV_TIMEOUT        4    /* time between retries      */
  252. #define CLIENT_DIRSRV_BACKOFF(x)  (2 * x)    /* Backoff algorithm         */
  253. #define CLIENT_DIRSRV_RETRY        3    /* retry this many times     */
  254.  
  255. /* Definitions for rd_vlink and rd_vdir */
  256. #define        SYMLINK_NESTING 10       /* Max nesting depth for sym links */
  257.  
  258. /* Definition fo check_acl */
  259. #define        ACL_NESTING     10       /* Max depth for ACL group nesting */
  260.  
  261. /* Flags for mk_vdir */
  262. #define         MKVD_LPRIV     1   /* Minimize privs for creator in new ACL    */
  263.  
  264. /* Flags for get_vdir */
  265. #define         GVD_UNION      0    /* Do not expand union links              */
  266. #define      GVD_EXPAND     1   /* Expand union links locally             */
  267. #define         GVD_LREMEXP    3   /* Request remote expansion of local links   */
  268. #define         GVD_REMEXP     7   /* Request remote expansion of all links     */
  269. #define         GVD_VERIFY     8    /* Only verify args are for a directory      */
  270. #define      GVD_FIND       16   /* Stop expanding when match is found        */
  271. #define         GVD_ATTRIB    32   /* Request attributes from remote server     */
  272. #define         GVD_NOSORT       64   /* Do not sort links when adding to dir      */
  273.  
  274. /* Flags for rd_vdir */
  275. #define         RVD_UNION      GVD_UNION
  276. #define         RVD_EXPAND     GVD_EXPAND 
  277. #define         RVD_LREMEXP    GVD_LREMEXP
  278. #define         RVD_REMEXP     GVD_REMEXP
  279. #define         RVD_DFILE_ONLY GVD_VERIFY /* Only return ptr to dir file        */
  280. #define      RVD_FIND       GVD_FIND   
  281. #define      RVD_ATTRIB     GVD_ATTRIB
  282. #define         RVD_NOSORT        GVD_NOSORT
  283. #define         RVD_NOCACHE    128
  284.  
  285. /* Flags for add_vlink */
  286. #define         AVL_UNION      1   /* Link is a union link                      */
  287.  
  288. /* Flags for vl_insert */
  289. #define         VLI_NOCONFLICT 0   /* Do not insert links w/ conflicting names  */
  290. #define      VLI_ALLOW_CONF 1   /* Allow links with conflicting names        */
  291. #define         VLI_NOSORT     2   /* Allow conflicts and don't sort            */
  292.  
  293. /* Flags for mapname */
  294. #define      MAP_READWRITE  0   /* Named file to be read and written         */
  295. #define         MAP_READONLY   1   /* Named file to be read only                */
  296.  
  297. /* Flags for modify_acl */
  298. #define         MACL_NOSYSTEM   0x01
  299. #define      MACL_NOSELF     0x02
  300. #define      MACL_DEFAULT    0x08
  301. #define      MACL_SET        0x0C
  302. #define      MACL_INSERT     0x14
  303. #define      MACL_DELETE     0x10
  304. #define      MACL_ADD        0x1C
  305. #define      MACL_SUBTRACT   0x18
  306. #define      MACL_LINK       0x00
  307. #define      MACL_DIRECTORY  0x20
  308. #define      MACL_OBJECT     0x60
  309. #define      MACL_INCLUDE    0x40
  310.  
  311. #define      MACL_OP    (MACL_DEFAULT|MACL_SET|MACL_INSERT|\
  312.              MACL_DELETE|MACL_ADD|MACL_SUBTRACT)
  313.  
  314. #define      MACL_OTYPE (MACL_LINK|MACL_DIRECTORY|MACL_OBJECT|MACL_INCLUDE)
  315.  
  316. /* Flags for dsrdir */
  317. #define DSRD_ATTRIBUTES                      0x1 /* Fill in attributes for links */
  318.  
  319. /* Access methods returned by Pget_am */
  320. #define P_AM_ERROR            0
  321. #define P_AM_FTP            1
  322. #define P_AM_AFTP            2  /* Anonymous FTP  */
  323. #define P_AM_NFS            4
  324. #define P_AM_KNFS            8  /* Kerberized NFS */
  325. #define P_AM_AFS               16
  326.  
  327. /* Return codes */
  328.  
  329. #define        PSUCCESS    0
  330. #define        PFAILURE    255
  331.  
  332. /* Hush up warnings.  */
  333. void vllfree();
  334.  
  335. /* Procedures in libpfs.a */
  336.  
  337. char *pget_wdhost(), *pget_wdfile(), *pget_wd(), *pget_hdhost();
  338. char *pget_hdfile(), *pget_hd(), *pget_rdhost(), *pget_rdfile();
  339. char *pget_dhost(), *pget_dfile(), *pget_vsname(), *nlsindex();
  340. char *sindex(), *nxtline(), *unquote(), *stcopy();
  341. char *stcopyr(), *readheader(), *month_sname();
  342.  
  343. long        asntotime();
  344. void        procquery();
  345.  
  346. PTEXT        ptalloc();
  347. PTEXT        dirsend();
  348. void        ptfree();
  349. void        ptlfree();
  350.  
  351. PREQ        pralloc();
  352. PREQ        get_next_request();
  353.  
  354. VLINK        rd_slink();
  355. VLINK        rd_vlink();
  356. VLINK        vl_delete();
  357. VLINK        vlalloc();
  358. VLINK        vlcopy();
  359. void        vlfree();
  360.  
  361. PFILE        pfalloc();
  362.  
  363. PATTRIB         parse_attribute();
  364. PATTRIB         atalloc();
  365. PATTRIB     pget_at();
  366. void        atfree();
  367. void        atlfree();
  368.  
  369. ACL             acalloc();
  370. ACL             get_acl();
  371.  
  372. void        stfree();
  373.  
  374. /* Miscellaneous useful definitions */
  375. #ifndef TRUE
  376. #define TRUE        1
  377. #define FALSE        0
  378. #endif
  379.  
  380. #define AUTHORIZED      1
  381. #define NOT_AUTHORIZED  0
  382. #define NEG_AUTHORIZED  -1
  383.  
  384. #ifndef NULL
  385. #define NULL        0
  386. #endif
  387.  
  388. #define FAILED        -1
  389.  
  390. #endif /* PFS_H */
  391.